package media

import (
	"fmt"
	"github.com/gin-gonic/gin"
	baidudDto "vrcm/src/vrcm/app/admin/service/dto/baidu"
	dto "vrcm/src/vrcm/app/admin/service/dto/media"
	service "vrcm/src/vrcm/app/admin/service/media"
	"vrcm/src/vrcm/common/apis"
)

type Media struct {
	apis.Api
}

func (e Media) CreateAIAssetAudit(c *gin.Context) {
	req := dto.LongVideoAuditReq{}
	s := service.Asset{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(apis.InternalError.Code, err, err.Error())
		return
	}
	//创建直播间
	err = s.CreateAIAssetAudit(&req)
	if err != nil {
		e.Error(apis.AIAuditError.Code, err, fmt.Sprintf("创建Ai审核失败，失败信息 %s", err.Error()))
		return
	}

	e.OK(nil, "创建成功")
}

func (e Media) LongVideoAuditResultCallBack(c *gin.Context) {
	req := baidudDto.LongVideoData{}
	s := service.Asset{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(apis.InternalError.Code, err, err.Error())
		return
	}

	e.Logger.Trace("进入长视频审核回调")
	//创建直播间
	err = s.LongVideoAuditResultCallBack(&req)
	if err != nil {
		e.Error(apis.AIAuditCallBackError.Code, err, fmt.Sprintf("Ai审核回调失败，失败信息 %s", err.Error()))
		return
	}
	e.OK(nil, "回调成功")
}

func (e Media) GetAuditStatisticByAsset(c *gin.Context) {
	req := baidudDto.GetAuditResultByAssetReq{}
	s := service.Asset{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(apis.InternalError.Code, err, err.Error())
		return
	}
	//创建直播间
	data, err := s.GetAuditStatisticByAsset(&req)
	if err != nil {
		e.Error(apis.DBQueryError.Code, err, fmt.Sprintf("获取审核数据失败，失败信息 %s", err.Error()))
		return
	}
	e.OK(data, "获取审核数据成功")
}

func (e Media) GetAuditStatisticByType(c *gin.Context) {
	req := baidudDto.GetAuditResultDetailByTypeReq{}
	s := service.Asset{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(apis.InternalError.Code, err, err.Error())
		return
	}
	var count int64
	//创建直播间
	data, err := s.GetAuditStatisticByType(&req, &count)
	if err != nil {
		e.Error(apis.DBQueryError.Code, err, fmt.Sprintf("获取审核数据失败，失败信息 %s", err.Error()))
		return
	}
	e.PageOK(data, int(count), req.GetPageIndex(), req.GetPageSize(), "获取审核数据成功")
}

func (e Media) UpdateAuditState(c *gin.Context) {
	req := dto.UpdateAuditState{}
	s := service.Asset{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(apis.InternalError.Code, err, err.Error())
		return
	}
	err = s.UpdateAuditState(&req)
	if err != nil {
		e.Error(apis.AuditUpdateStateError.Code, err, fmt.Sprintf("更新审核状态失败，失败信息 %s", err.Error()))
		return
	}
	e.OK(nil, "获取审核状态成功")
}

func (e Media) GetAuditHistoryByAsset(c *gin.Context) {
	req := dto.GetAuditState{}
	s := service.Asset{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(apis.InternalError.Code, err, err.Error())
		return
	}
	data, err := s.GetAuditHistoryByAsset(&req)
	if err != nil {
		e.Error(apis.DBQueryError.Code, err, fmt.Sprintf("获取审核历史失败，失败信息 %s", err.Error()))
		return
	}
	e.OK(data, "获取审核历史成功")
}

func (e Media) GetAudit(c *gin.Context) {
	req := dto.GetAudit{}
	s := service.Asset{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(apis.InternalError.Code, err, err.Error())
		return
	}
	data, err := s.GetAudit(&req)
	if err != nil {
		e.Error(apis.DBQueryError.Code, err, fmt.Sprintf("获取审核状态失败，失败信息 %s", err.Error()))
		return
	}
	e.OK(data, "获取审核状成功")
}

func (e Media) DeleteAssetAudit(c *gin.Context) {
	req := dto.DeleteAssetAudit{}
	s := service.Asset{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(apis.InternalError.Code, err, err.Error())
		return
	}
	err = s.DeleteAssetAudit(&req)
	if err != nil {
		e.Error(apis.DeleteCortexError.Code, err, fmt.Sprintf("删除素材审核，失败信息 %s", err.Error()))
		return
	}
	e.OK(nil, "删除素材成功")
}

func (e Media) GetMediaAssetAuditStatic(c *gin.Context) {
	req := dto.GetAuditStatic{}
	s := service.Asset{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(apis.InternalError.Code, err, err.Error())
		return
	}
	data, err := s.GetMediaAssetAuditStatic(&req)
	if err != nil {
		e.Error(apis.DBQueryError.Code, err, fmt.Sprintf("获取审核图片失败，失败信息 %s", err.Error()))
		return
	}
	e.OK(data, "获取审核图片成功")
}
